package com.interviewbackend.service.Impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.interviewbackend.client.InformationPreprocessingClient;
import com.interviewbackend.client.QuestionGenerationClient;
import com.interviewbackend.entity.SubQuestionFile;
import com.interviewbackend.mapper.QuestionFileMapper;
import com.interviewbackend.mapper.SubQuestionFileMapper;
import com.interviewbackend.service.SubQuestionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.nio.charset.StandardCharsets;
import java.util.List;

@Service
public class SubQuestionServiceImpl implements SubQuestionService {

    @Autowired private SubQuestionFileMapper subQuestionFileMapper;
    @Autowired private InformationPreprocessingClient gptClient;
    @Autowired private QuestionGenerationClient questionGenerationClient;

    @Override
    public byte[] generateSubQuestionFile(List<String> keywords, String jobType, String content) {
        // 2. 拼接 prompt，调用 GPT 筛选题目
        String prompt = """
        你是一个技术面试题生成专家，请根据以下信息生成子题库。
        【岗位方向】
        %s
        【原始题库内容】
        %s
        【简历关键词】
        %s
        请你根据上述题库内容和关键词，从中筛选出匹配度最高的100道面试题。这些题目将组成一个新的子题库，要求如下：
        1. 题目需与岗位方向和关键词紧密相关；
        2. 所有题目请只使用简洁的问句形式（不需要选项、不需要答案、不需要解释）；
        3. 以标准 JSON 数组格式返回，例如：
        [
          "请介绍一下你在项目中的职责。",
          "你工作怎么样？"
        ]
        4. 严格按照 JSON 格式输出，**不要添加任何其他说明或标注**。
        """.formatted(jobType, content, String.join(", ", keywords));

        // 调用 GPT 模型生成问题
        String resultJson = questionGenerationClient.generateQuestionFromPrompt(prompt);

        // 返回生成的 JSON 字符串的字节数组
        return resultJson.getBytes(StandardCharsets.UTF_8);
    }


    @Override
    public Long saveSubQuestionFile(Long interviewId, byte[] content, String fileName, List<String> keywords) throws JsonProcessingException {
        SubQuestionFile sub = new SubQuestionFile();
        sub.setInterviewId(interviewId);
        sub.setFileName(fileName);
        sub.setContent(content);

        ObjectMapper mapper = new ObjectMapper();
        sub.setKeywordSource(mapper.writeValueAsString(keywords));

        subQuestionFileMapper.insert(sub);
        return sub.getId();
    }
}


